package com.sogoodsoft.entity.crm;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import com.sogoodsoft.entity.IdEntity;
import com.sogoodsoft.entity.app.Organization;
import com.sogoodsoft.entity.app.SysClass;

/**
 * DOCUMENT对象模型
 */
@Entity
@Table(name = "DOCUMENT")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Document extends IdEntity implements java.io.Serializable {
    private static final long serialVersionUID = 1L;

    /** 文档题目 */
    private String title;

    /** 摘要，用于搜索 */
    private String summary;

    /** 创建者姓名 */
    private String creator;

    /** 创建者ID,删除系统用户时，删除此人的私有文档，不能关联删除此创建者的公开文档和绝密文档 */
    private Long creatorid;

    /** 最后更新时间 */
    private Date lastupdated;

    /** 文档分类，1公司规定、2合同文书、等等，后台添加 */
    private SysClass category;

    /** 私有、公司公开、公司绝密（需某个级别以上的人才可以管理） */
    private SysClass doctype;

    /** 此部门领导及以上可以查看 */
    private Long mustdepart;

    /** 文档所属部门ID，可为空 */
    private Organization depart;

    /**
     * 获取文档题目
     * 
     * @return 文档题目
     */
    @Column(name = "TITLE")
    public String getTitle() {
        return this.title;
    }

    /**
     * 设置文档题目
     * 
     * @param title
     *            文档题目
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * 获取摘要，用于搜索
     * 
     * @return 摘要，用于搜索
     */
    @Column(name = "SUMMARY")
    public String getSummary() {
        return this.summary;
    }

    /**
     * 设置摘要，用于搜索
     * 
     * @param summary
     *            摘要，用于搜索
     */
    public void setSummary(String summary) {
        this.summary = summary;
    }

    /**
     * 获取创建者姓名
     * 
     * @return 创建者姓名
     */
    @Column(name = "CREATOR")
    public String getCreator() {
        return this.creator;
    }

    /**
     * 设置创建者姓名
     * 
     * @param creator
     *            创建者姓名
     */
    public void setCreator(String creator) {
        this.creator = creator;
    }

    /**
     * 获取创建者ID,删除系统用户时，删除此人的私有文档，不能关联删除此创建者的公开文档和绝密文档
     * 
     * @return 创建者ID,删除系统用户时，删除此人的私有文档，不能关联删除此创建者的公开文档和绝密文档
     */
    @Column(name = "CREATORID")
    public Long getCreatorid() {
        return this.creatorid;
    }

    /**
     * 设置创建者ID,删除系统用户时，删除此人的私有文档，不能关联删除此创建者的公开文档和绝密文档
     * 
     * @param creatorid
     *            创建者ID,删除系统用户时，删除此人的私有文档，不能关联删除此创建者的公开文档和绝密文档
     */
    public void setCreatorid(Long creatorid) {
        this.creatorid = creatorid;
    }

    /**
     * 获取最后更新时间
     * 
     * @return 最后更新时间
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "LASTUPDATED")
    public Date getLastupdated() {
        return this.lastupdated;
    }

    /**
     * 设置最后更新时间
     * 
     * @param lastupdated
     *            最后更新时间
     */
    public void setLastupdated(Date lastupdated) {
        this.lastupdated = lastupdated;
    }

    /**
     * 获取文档分类，1公司规定、2合同文书、等等，后台添加
     * 
     * @return 文档分类，1公司规定、2合同文书、等等，后台添加
     */
    @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
    @JoinColumn(name = "CATEGORY")
    public SysClass getCategory() {
        return this.category;
    }

    /**
     * 设置文档分类，1公司规定、2合同文书、等等，后台添加
     * 
     * @param category
     *            文档分类，1公司规定、2合同文书、等等，后台添加
     */
    public void setCategory(SysClass category) {
        this.category = category;
    }

    /**
     * 获取私有、公司公开、公司绝密（需某个级别以上的人才可以管理）
     * 
     * @return 私有、公司公开、公司绝密（需某个级别以上的人才可以管理）
     */
    @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
    @JoinColumn(name = "DOCTYPE")
    public SysClass getDoctype() {
        return this.doctype;
    }

    /**
     * 设置私有、公司公开、公司绝密（需某个级别以上的人才可以管理）
     * 
     * @param doctype
     *            私有、公司公开、公司绝密（需某个级别以上的人才可以管理）
     */
    public void setDoctype(SysClass doctype) {
        this.doctype = doctype;
    }

    /**
     * 获取此部门领导及以上可以查看
     * 
     * @return 此部门领导及以上可以查看
     */
    @Column(name = "MUSTDEPART")
    public Long getMustdepart() {
        return this.mustdepart;
    }

    /**
     * 设置此部门领导及以上可以查看
     * 
     * @param mustdepart
     *            此部门领导及以上可以查看
     */
    public void setMustdepart(Long mustdepart) {
        this.mustdepart = mustdepart;
    }

    /**
     * 获取文档所属部门ID，可为空
     * 
     * @return 文档所属部门ID，可为空
     */
    @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
    @JoinColumn(name = "DEPART")
    public Organization getDepart() {
        return this.depart;
    }

    /**
     * 设置文档所属部门ID，可为空
     * 
     * @param depart
     *            文档所属部门ID，可为空
     */
    public void setDepart(Organization depart) {
        this.depart = depart;
    }

}